package com.base.dynamicprograming;

/**
 * 91. 解码方法
 *
 * @author leon
 * @date 2021年12月10日 18:46
 */
public class NumDecodings {

    public int numDecodings(String s){
        if (s == null){
            throw new NullPointerException();
        }
        char[] array = s.toCharArray();
        int n = array.length;
        if(array.length==0||array[0]=='0'){
            return 0;
        }
        int p = 1,q=1;

        for (int i = 1; i < n; i++) {
            int douInt = (int) (array[i-1] - '0')*10+(int) (array[i] - '0');
            //  当前位为0，前一位必须是1或者2，否则直接返回零
            if(array[i] == '0'){
                if(array[i-1] == '1'||array[i-1]=='2'){
                    q = p;

                }else {
                    return 0;
                }

            // 当前位不为零
            }else {
                // 首位为零 ，直接返回0
                if(array[i-1]=='0'){
                    if(i-1 == 0){
                        return 0;
                    }
                    p = q;
                }else if (douInt>9&&douInt<=26){
                    int tmp = q+p;
                    p = q;
                    q = tmp;
                }else {
                    p = q;
                }
            }


        }
        return q;
    }

    public static void main(String[] args) {
        System.out.println(new NumDecodings().numDecodings("5060"));
    }
}
